Conceptual units
Study 1
Study 2
Study 3
Study 4
Organization of conceptual units
Study 1
Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

Study 2
Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

Study 3
Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

Study 4
Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

Joining, by = "capacity"
Joining, by = "condition"

LS0tCnRpdGxlOiAiQm9keSwgSGVhcnQsICYgTWluZDogUmUtYW5hbHlzaXMgZm9yIGRpc3NlcnRhdGlvbiIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogZmxhdGx5CiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgojIFNldHVwCgpgYGB7ciB3b3Jrc3BhY2Ugc2V0dXB9CiMgbG9hZCBsaWJyYXJpZXMKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkobGFuZ2NvZykgIyBzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9sYW5nY29nL2xhbmdjb2cKCiMgc3VwcG9ydGluZyBmdW5jdGlvbnMKc291cmNlKCIuLi9zY3JpcHRzL21heF9mYWN0b3JzX2VmYS5SIikKc291cmNlKCIuLi9zY3JpcHRzL3JldGVuX2Z1bi5SIikKc291cmNlKCIuLi9zY3JpcHRzL3Bsb3RfZnVuLlIiKQpzb3VyY2UoIi4uL3NjcmlwdHMvZWZhX2Z1bi5SIikKYGBgCgpgYGB7ciBmdW5jdGlvbnN9CiMgbWFrZSBjbGVhbnVwIGZ1bmN0aW9uCmNsZWFudXAgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiKSkgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZF9yYXdfc3R1ZHkxfQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZF9yYXdfc3R1ZHkyfQogICAgCiAgICAjIGVuYWN0IGV4Y2x1c2lvbmFyeSBjcml0ZXJpYQogICAgZF9jbGVhbl8xIDwtIGQgJT4lCiAgICAgIG11dGF0ZShmaW5pc2hlZF9tb2QgPSBpZmVsc2UoaXMubmEoQ0FUQ0gpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSCA9PSAxLCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgZmluaXNoZWRfbW9kICE9IDApICU+JSAjIGV4Y2x1ZGUgUHMgd2hvIGRpZCBub3QgY29tcGxldGUgdGFzawogICAgICBtdXRhdGUoeW9iX2NvcnJlY3QgPSBhcy5udW1lcmljKAogICAgICAgIGlmZWxzZShhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA+IDE5MDAgJiAKICAgICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSA8IDIwMDAsIAogICAgICAgICAgICAgICBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSwgTkEpKSwgIyBjb3JyZWN0IGZvcm1hdHRpbmcgaW4geW9iCiAgICAgICAgYWdlX2FwcHJveCA9IDIwMTYgLSB5b2JfY29ycmVjdCkgJT4lICMgY2FsY3VsYXRlIGFwcHJveGltYXRlIGFnZQogICAgICBtdXRhdGUoZ2VuZGVyID0gZmFjdG9yKGdlbmRlciwgbGV2ZWxzID0gYygxLCAyLCAwKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibSIsICJmIiwgIm90aGVyIikpKSAlPiUKICAgICAgZmlsdGVyKGFnZV9hcHByb3ggPj0gMTgpICMgZXhjbHVkZSBQcyB3aG8gYXJlIHlvdW5nZXIgdGhhbiAxOCB5ZWFycwogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW4gPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgZHVyYXRpb24KICAgICAgICBkdXJhdGlvbiA9IGFzLm51bWVyaWMoZGlmZnRpbWUoc3RycHRpbWUoZW5kX3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwdGltZShzdGFydF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgPSAibWlucyIpKSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmFjZQogICAgICAgIHJhY2VfYXNpYW5fZWFzdCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX2Vhc3QpLCAiIiwgImFzaWFuX2Vhc3QgIikpLAogICAgICAgIHJhY2VfYXNpYW5fc291dGggPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9zb3V0aCksICIiLCAiYXNpYW5fc291dGggIikpLAogICAgICAgIHJhY2VfYXNpYW5fb3RoZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9vdGhlciksICIiLCAiYXNpYW5fb3RoZXIgIikpLAogICAgICAgIHJhY2VfYmxhY2sgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9ibGFjayksICIiLCAiYmxhY2sgIikpLAogICAgICAgIHJhY2VfaGlzcGFuaWMgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9oaXNwYW5pYyksICIiLCAiaGlzcGFuaWMgIikpLAogICAgICAgIHJhY2VfbWlkZGxlX2Vhc3Rlcm4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9taWRkbGVfZWFzdGVybiksICIiLCAibWlkZGxlX2Vhc3Rlcm4gIikpLAogICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbmF0aXZlX2FtZXJpY2FuKSwgIiIsICJuYXRpdmVfYW1lcmljYW4gIikpLAogICAgICAgIHJhY2VfcGFjX2lzbGFuZGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfcGFjX2lzbGFuZGVyKSwgIiIsICJwYWNfaXNsYW5kZXIgIikpLAogICAgICAgIHJhY2Vfd2hpdGUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV93aGl0ZSksICIiLCAid2hpdGUgIikpLAogICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfb3RoZXJfcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJhY2VfY2F0ID0gcGFzdGUwKHJhY2VfYXNpYW5fZWFzdCwgcmFjZV9hc2lhbl9zb3V0aCwgcmFjZV9hc2lhbl9vdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX2JsYWNrLCByYWNlX2hpc3BhbmljLCByYWNlX21pZGRsZV9lYXN0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuLCByYWNlX3BhY19pc2xhbmRlciwgcmFjZV93aGl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX290aGVyX3ByZWZubyksCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJhY2VfY2F0KSksCiAgICAgICAgcmFjZV9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJhY2VfY2F0MikgPT0gVCwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihyYWNlX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZDplbmRfdGltZSwgZHVyYXRpb24sIGZpbmlzaGVkOmdlbmRlciwgCiAgICAgICAgICAgICByZWxpZ2lvbl9idWRkaGlzbTphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJlbGlnaW9uCiAgICAgICAgcmVsaWdpb25fYnVkZGhpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fYnVkZGhpc20pLCAiIiwgImJ1ZGRoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9jaHJpc3RpYW5pdHkgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fY2hyaXN0aWFuaXR5KSwgIiIsICJjaHJpc3RpYW5pdHkgIikpLAogICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2hpbmR1aXNtKSwgIiIsICJoaW5kdWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25faXNsYW0gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faXNsYW0pLCAiIiwgImlzbGFtICIpKSwKICAgICAgICByZWxpZ2lvbl9qYWluaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2phaW5pc20pLCAiIiwgImphaW5pc20gIikpLAogICAgICAgIHJlbGlnaW9uX2p1ZGFpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fanVkYWlzbSksICIiLCAianVkYWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fc2lraGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9zaWtoaXNtKSwgIiIsICJzaWtoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9vdGhlciksICIiLCAib3RoZXIgIikpLAogICAgICAgIHJlbGlnaW9uX25vbmUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fbm9uZSksICIiLCAibm9uZSAiKSksCiAgICAgICAgcmVsaWdpb25fcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByZWxpZ2lvbl9jYXQgPSBwYXN0ZTAocmVsaWdpb25fYnVkZGhpc20sIHJlbGlnaW9uX2NocmlzdGlhbml0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtLCByZWxpZ2lvbl9pc2xhbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2phaW5pc20sIHJlbGlnaW9uX2p1ZGFpc20sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZ2lvbl9zaWtoaXNtLCByZWxpZ2lvbl9vdGhlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX25vbmUsIHJlbGlnaW9uX3ByZWZubyksCiAgICAgICAgcmVsaWdpb25fY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByZWxpZ2lvbl9jYXQpKSwKICAgICAgICByZWxpZ2lvbl9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJlbGlnaW9uX2NhdDIpID09IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJlbGlnaW9uX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmdlbmRlciwgZmVlZGJhY2s6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgZCA8LSBkX3Jhd19zdHVkeTMKICAgIAogICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkICU+JQogICAgICBtdXRhdGUoZmluaXNoZWRfbW9kID0gaWZlbHNlKGlzLm5hKENBVENILi5jaGFyYWN0ZXJMKSB8IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMubmEoQ0FUQ0guLmNoYXJhY3RlclIpLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShmaW5pc2hlZCA9PSAxLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjUpKSkgJT4lCiAgICAgIGZpbHRlcihDQVRDSC4uY2hhcmFjdGVyTCA9PSA1LCAjIGV4Y2x1ZGUgUHMgd2hvIGZhaWwgY2F0Y2ggdHJpYWxzIAogICAgICAgICAgICAgQ0FUQ0guLmNoYXJhY3RlclIgPT0gNSwKICAgICAgICAgICAgIGZpbmlzaGVkX21vZCAhPSAwKSAlPiUgIyBleGNsdWRlIFBzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRhc2sKICAgICAgbXV0YXRlKHlvYl9jb3JyZWN0ID0gYXMubnVtZXJpYygKICAgICAgICBpZmVsc2UoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPiAxOTAwICYgCiAgICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPCAyMDAwLCAKICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSksIE5BKSksICMgY29ycmVjdCBmb3JtYXR0aW5nIGluIHlvYgogICAgICAgIGFnZV9hcHByb3ggPSAyMDE2IC0geW9iX2NvcnJlY3QpICU+JSAjIGNhbGN1bGF0ZSBhcHByb3hpbWF0ZSBhZ2UKICAgICAgbXV0YXRlKGdlbmRlciA9IGZhY3RvcihnZW5kZXIsIGxldmVscyA9IGMoMSwgMiwgMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIm0iLCAiZiIsICJvdGhlciIpKSkgJT4lCiAgICAgIGZpbHRlcihhZ2VfYXBwcm94ID49IDE4KSAjIGV4Y2x1ZGUgUHMgd2hvIGFyZSB5b3VuZ2VyIHRoYW4gMTggeWVhcnMKICAgIAogICAgIyByZWNvZGUgYmFja2dyb3VuZCBhbmQgZGVtb2dyYXBoaWMgdmFyaWFibGVzCiAgICBkX2NsZWFuXzIgPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgZHVyYXRpb24KICAgICAgICBkdXJhdGlvbiA9IGFzLm51bWVyaWMoZGlmZnRpbWUoc3RycHRpbWUoZW5kX3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwdGltZShzdGFydF90aW1lLCAiJUk6JU06JVMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgPSAibWlucyIpKSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmFjZQogICAgICAgIHJhY2VfYXNpYW5fZWFzdCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX2Vhc3QpLCAiIiwgImFzaWFuX2Vhc3QgIikpLAogICAgICAgIHJhY2VfYXNpYW5fc291dGggPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9zb3V0aCksICIiLCAiYXNpYW5fc291dGggIikpLAogICAgICAgIHJhY2VfYXNpYW5fb3RoZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9hc2lhbl9vdGhlciksICIiLCAiYXNpYW5fb3RoZXIgIikpLAogICAgICAgIHJhY2VfYmxhY2sgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9ibGFjayksICIiLCAiYmxhY2sgIikpLAogICAgICAgIHJhY2VfaGlzcGFuaWMgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9oaXNwYW5pYyksICIiLCAiaGlzcGFuaWMgIikpLAogICAgICAgIHJhY2VfbWlkZGxlX2Vhc3Rlcm4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9taWRkbGVfZWFzdGVybiksICIiLCAibWlkZGxlX2Vhc3Rlcm4gIikpLAogICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfbmF0aXZlX2FtZXJpY2FuKSwgIiIsICJuYXRpdmVfYW1lcmljYW4gIikpLAogICAgICAgIHJhY2VfcGFjX2lzbGFuZGVyID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfcGFjX2lzbGFuZGVyKSwgIiIsICJwYWNfaXNsYW5kZXIgIikpLAogICAgICAgIHJhY2Vfd2hpdGUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV93aGl0ZSksICIiLCAid2hpdGUgIikpLAogICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2Vfb3RoZXJfcHJlZm5vKSwgIiIsICJvdGhlcl9wcmVmbm8gIikpLAogICAgICAgIHJhY2VfY2F0ID0gcGFzdGUwKHJhY2VfYXNpYW5fZWFzdCwgcmFjZV9hc2lhbl9zb3V0aCwgcmFjZV9hc2lhbl9vdGhlciwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX2JsYWNrLCByYWNlX2hpc3BhbmljLCByYWNlX21pZGRsZV9lYXN0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfbmF0aXZlX2FtZXJpY2FuLCByYWNlX3BhY19pc2xhbmRlciwgcmFjZV93aGl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICByYWNlX290aGVyX3ByZWZubyksCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJhY2VfY2F0KSksCiAgICAgICAgcmFjZV9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJhY2VfY2F0MikgPT0gVCwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzLmNoYXJhY3RlcihyYWNlX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5LCBzdWJpZDplbmRfdGltZSwgZHVyYXRpb24sIGZpbmlzaGVkOmdlbmRlciwgCiAgICAgICAgICAgICByZWxpZ2lvbl9idWRkaGlzbTphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJlbGlnaW9uCiAgICAgICAgcmVsaWdpb25fYnVkZGhpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fYnVkZGhpc20pLCAiIiwgImJ1ZGRoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9jaHJpc3RpYW5pdHkgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fY2hyaXN0aWFuaXR5KSwgIiIsICJjaHJpc3RpYW5pdHkgIikpLAogICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2hpbmR1aXNtKSwgIiIsICJoaW5kdWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25faXNsYW0gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25faXNsYW0pLCAiIiwgImlzbGFtICIpKSwKICAgICAgICByZWxpZ2lvbl9qYWluaXNtID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX2phaW5pc20pLCAiIiwgImphaW5pc20gIikpLAogICAgICAgIHJlbGlnaW9uX2p1ZGFpc20gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fanVkYWlzbSksICIiLCAianVkYWlzbSAiKSksCiAgICAgICAgcmVsaWdpb25fc2lraGlzbSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9zaWtoaXNtKSwgIiIsICJzaWtoaXNtICIpKSwKICAgICAgICByZWxpZ2lvbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyZWxpZ2lvbl9vdGhlciksICIiLCAib3RoZXIgIikpLAogICAgICAgIHJlbGlnaW9uX25vbmUgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmVsaWdpb25fbm9uZSksICIiLCAibm9uZSAiKSksCiAgICAgICAgcmVsaWdpb25fcHJlZm5vID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJlbGlnaW9uX3ByZWZubyksICIiLCAib3RoZXJfcHJlZm5vICIpKSwKICAgICAgICByZWxpZ2lvbl9jYXQgPSBwYXN0ZTAocmVsaWdpb25fYnVkZGhpc20sIHJlbGlnaW9uX2NocmlzdGlhbml0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2hpbmR1aXNtLCByZWxpZ2lvbl9pc2xhbSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX2phaW5pc20sIHJlbGlnaW9uX2p1ZGFpc20sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZ2lvbl9zaWtoaXNtLCByZWxpZ2lvbl9vdGhlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGlnaW9uX25vbmUsIHJlbGlnaW9uX3ByZWZubyksCiAgICAgICAgcmVsaWdpb25fY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCByZWxpZ2lvbl9jYXQpKSwKICAgICAgICByZWxpZ2lvbl9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJlbGlnaW9uX2NhdDIpID09IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJlbGlnaW9uX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmdlbmRlciwgZmVlZGJhY2s6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW5hbWUgcmVzcG9uc2UgdmFyaWFibGVzCiAgICBkX2NsZWFuXzMgPC0gZF9jbGVhbl8yCiAgICBuYW1lcyhkX2NsZWFuXzMpIDwtIGdzdWIoImdldCIsICIiLCBuYW1lcyhkX2NsZWFuXzMpKQogICAgbmFtZXMoZF9jbGVhbl8zKSA8LSBnc3ViKCJcXC4iLCAiIiwgbmFtZXMoZF9jbGVhbl8zKSkKICAgIG5hbWVzKGRfY2xlYW5fMykgPC0gZ3N1YigiY2hhciIsICJfY2hhciIsIG5hbWVzKGRfY2xlYW5fMykpCiAgICBuYW1lcyhkX2NsZWFuXzMpW25hbWVzKGRfY2xlYW5fMykgJWluJSBjKCJfY2hhcmFjdGVyTCIsICJfY2hhcmFjdGVyUiIpXSA8LSAKICAgICAgYygiY2hhcmFjdGVyTCIsICJjaGFyYWN0ZXJSIikKICAgIAogICAgIyByZWNvZGUgcmVzcG9uc2UgdmFyaWFibGVzIChjZW50ZXIpCiAgICBkX2NsZWFuXzQgPC0gZF9jbGVhbl8zCiAgICBmb3IoaSBpbiAxMTo5MikgewogICAgICBkX2NsZWFuXzRbLGldIDwtIGRfY2xlYW5fNFssaV0gLSA0ICMgdHJhbnNmb3JtIGZyb20gMSB0byA3IC0tPiAtMyB0byAzCiAgICB9CiAgICAKICAgICMgcmVjb2RlIGNoYXJhY3RlckwgdnMuIGNoYXJhY3RlclIgYXMgYmVldGxlIHZzLiByb2JvdAogICAgZF9jbGVhbl81X2RlbW8gPC0gZF9jbGVhbl80ICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OmNvbmRpdGlvbiwgeW9iOnJlbGlnaW9uX2NhdCkKICAgIAogICAgZF9jbGVhbl81X2NoYXJhY3RlckwgPC0gZF9jbGVhbl80ICU+JQogICAgICBtdXRhdGUodGFyZ2V0ID0gY2hhcmFjdGVyTCkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkLCB0YXJnZXQsIGhhcHB5X2NoYXJhY3Rlckw6Q0FUQ0hfY2hhcmFjdGVyTCkKICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJMKSA8LSBnc3ViKCJfY2hhcmFjdGVyTCIsICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJMKSkKICAgIAogICAgZF9jbGVhbl81X2NoYXJhY3RlclIgPC0gZF9jbGVhbl80ICU+JQogICAgICBtdXRhdGUodGFyZ2V0ID0gY2hhcmFjdGVyUikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkLCB0YXJnZXQsIGhhcHB5X2NoYXJhY3RlclI6Q0FUQ0hfY2hhcmFjdGVyUikKICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSA8LSBnc3ViKCJfY2hhcmFjdGVyUiIsICIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSkKICAgIAogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzVfY2hhcmFjdGVyTCAlPiUKICAgICAgZnVsbF9qb2luKGRfY2xlYW5fNV9jaGFyYWN0ZXJSKSAlPiUKICAgICAgZnVsbF9qb2luKGRfY2xlYW5fNV9kZW1vKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQsIGRhdGU6cmVsaWdpb25fY2F0LCB0YXJnZXQ6Q0FUQ0gpCiAgICAKICAgICMgcmVtb3ZlIGV4dHJhbmVvdXMgZGZzIGFuZCB2YXJpYWJsZXMKICAgIHJtKGQsIGRfY2xlYW5fMSwgZF9jbGVhbl8yLCBkX2NsZWFuXzMsIGRfY2xlYW5fNCwgZF9jbGVhbl81X2NoYXJhY3RlckwsIAogICAgICAgZF9jbGVhbl81X2NoYXJhY3RlclIsIGRfY2xlYW5fNV9kZW1vLCBpKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgZCA8LSBkX3Jhd19zdHVkeTQKCiAgICAgICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkICU+JQogICAgICBtdXRhdGUoZmluaXNoZWRfbW9kID0gaWZlbHNlKGlzLm5hKENBVENIKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZmluaXNoZWQgPT0gMSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41KSkpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0ggPT0gMSwgIyBleGNsdWRlIFBzIHdobyBmYWlsIGNhdGNoIHRyaWFscyAKICAgICAgICAgICAgIGZpbmlzaGVkX21vZCAhPSAwKSAlPiUgIyBleGNsdWRlIFBzIHdobyBkaWQgbm90IGNvbXBsZXRlIHRhc2sKICAgICAgbXV0YXRlKHlvYl9jb3JyZWN0ID0gYXMubnVtZXJpYygKICAgICAgICBpZmVsc2UoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPiAxOTAwICYgCiAgICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSkgPCAyMDAwLCAKICAgICAgICAgICAgICAgYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoeW9iKSksIE5BKSksICMgY29ycmVjdCBmb3JtYXR0aW5nIGluIHlvYgogICAgICAgIGFnZV9hcHByb3ggPSAyMDE2IC0geW9iX2NvcnJlY3QpICU+JSAjIGNhbGN1bGF0ZSBhcHByb3hpbWF0ZSBhZ2UKICAgICAgbXV0YXRlKGdlbmRlciA9IGZhY3RvcihnZW5kZXIsIGxldmVscyA9IGMoMSwgMiwgMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIm0iLCAiZiIsICJvdGhlciIpKSkgJT4lCiAgICAgIGZpbHRlcihhZ2VfYXBwcm94ID49IDE4KSAjIGV4Y2x1ZGUgUHMgd2hvIGFyZSB5b3VuZ2VyIHRoYW4gMTggeWVhcnMKICAgIAogICAgIyByZWNvZGUgb25lIGNoYXJhY3RlcgogICAgZF9jbGVhbl8yIDwtIGRfY2xlYW5fMSAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3RvcihpZmVsc2UoCiAgICAgICAgZ3JlcGwoInZlZ2V0YXRpdmUiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksICJwdnMiLAogICAgICAgIGlmZWxzZShncmVwbCgiYmx1ZSIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwgImJsdWVqYXkiLAogICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoImNoaW1wIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLCAiY2hpbXAiLAogICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpKSkpKQoKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzIgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCBzdHVkeSBkdXJhdGlvbgogICAgICAgIGR1cmF0aW9uID0gYXMubnVtZXJpYyhkaWZmdGltZShzdHJwdGltZShlbmRfdGltZSwgIiVJOiVNOiVTIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnB0aW1lKHN0YXJ0X3RpbWUsICIlSTolTTolUyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cyA9ICJtaW5zIikpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9hc2lhbl9lYXN0ID0gCiAgICAgICAgICBmYWN0b3IoaWZlbHNlKGlzLm5hKHJhY2VfYXNpYW5fZWFzdCksICIiLCAiYXNpYW5fZWFzdCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9zb3V0aCA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX3NvdXRoKSwgIiIsICJhc2lhbl9zb3V0aCAiKSksCiAgICAgICAgcmFjZV9hc2lhbl9vdGhlciA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2FzaWFuX290aGVyKSwgIiIsICJhc2lhbl9vdGhlciAiKSksCiAgICAgICAgcmFjZV9ibGFjayA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2JsYWNrKSwgIiIsICJibGFjayAiKSksCiAgICAgICAgcmFjZV9oaXNwYW5pYyA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX2hpc3BhbmljKSwgIiIsICJoaXNwYW5pYyAiKSksCiAgICAgICAgcmFjZV9taWRkbGVfZWFzdGVybiA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX21pZGRsZV9lYXN0ZXJuKSwgIiIsICJtaWRkbGVfZWFzdGVybiAiKSksCiAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9uYXRpdmVfYW1lcmljYW4pLCAiIiwgIm5hdGl2ZV9hbWVyaWNhbiAiKSksCiAgICAgICAgcmFjZV9wYWNfaXNsYW5kZXIgPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9wYWNfaXNsYW5kZXIpLCAiIiwgInBhY19pc2xhbmRlciAiKSksCiAgICAgICAgcmFjZV93aGl0ZSA9IAogICAgICAgICAgZmFjdG9yKGlmZWxzZShpcy5uYShyYWNlX3doaXRlKSwgIiIsICJ3aGl0ZSAiKSksCiAgICAgICAgcmFjZV9vdGhlcl9wcmVmbm8gPSAKICAgICAgICAgIGZhY3RvcihpZmVsc2UoaXMubmEocmFjZV9vdGhlcl9wcmVmbm8pLCAiIiwgIm90aGVyX3ByZWZubyAiKSksCiAgICAgICAgcmFjZV9jYXQgPSBwYXN0ZTAocmFjZV9hc2lhbl9lYXN0LCByYWNlX2FzaWFuX3NvdXRoLCByYWNlX2FzaWFuX290aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2VfYmxhY2ssIHJhY2VfaGlzcGFuaWMsIHJhY2VfbWlkZGxlX2Vhc3Rlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFjZV9uYXRpdmVfYW1lcmljYW4sIHJhY2VfcGFjX2lzbGFuZGVyLCByYWNlX3doaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhY2Vfb3RoZXJfcHJlZm5vKSwKICAgICAgICByYWNlX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmFjZV9jYXQpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmVuZF90aW1lLCBkdXJhdGlvbiwgZmluaXNoZWQ6Z2VuZGVyLCAKICAgICAgICAgICAgIGVkdWNhdGlvbjphZ2VfYXBwcm94LCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpCiAgICAKICAgICMgZmlsdGVyIGNvbmRpdGlvbnMgaWYgZGVzaXJlZAogICAgaWYoaXMuZWxlbWVudCgibm9uZSIsIGNob3NlbkV4Y2x1ZGUpKSB7fSBlbHNlIHsKICAgICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICAgIGZpbHRlcighY29uZGl0aW9uICVpbiUgY2hvc2VuRXhjbHVkZSkKICAgIH0KICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xLCBkX2NsZWFuXzIpCiAgfQogIAojICAgIyB0cmFuc2Zvcm0gdG8gMCB0byA2IHNjYWxlCiMgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiMgICAgIGdhdGhlcihtYywgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKIyAgICAgbXV0YXRlKHNjb3JlID0gc2NvcmUgKyAzKSAlPiUgIyB0cmFuc2Zvcm0gZnJvbSAtMyB0byAzIC0tPiAwIHRvIDYKIyAgICAgc3ByZWFkKG1jLCBzY29yZSkKICAKICAjIHJlbW92ZSBvdXRsaWVycwogIGlmKGNob3Nlbk91dGxpZXJIYW5kbGluZyA9PSAicmVtb3ZlIikgewogICAgCiAgICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgICBnYXRoZXIobWMsIHNjb3JlLCBoYXBweTpwcmlkZSkgJT4lCiAgICAgICAgZ3JvdXBfYnkoY29uZGl0aW9uLCBtYykgJT4lCiAgICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgICBzcHJlYWQobWMsIHNjb3JlKSAlPiUKICAgICAgICBhcnJhbmdlKGNvbmRpdGlvbiwgc3ViaWQpCiAgICB9CiAgICAKICAgIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgICBnYXRoZXIobWMsIHNjb3JlLCBoYXBweTpwcmlkZSkgJT4lCiAgICAgICAgZ3JvdXBfYnkodGFyZ2V0LCBtYykgJT4lCiAgICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgICBzcHJlYWQobWMsIHNjb3JlKSAlPiUKICAgICAgICBhcnJhbmdlKHRhcmdldCwgc3ViaWQpCiAgICB9CiAgICAKICB9CiAgCiAgIyBmaWx0ZXIgaXRlbXMgaWYgZGVzaXJlZAogIGlmKGlzLmVsZW1lbnQoIm5vbmUiLCBjaG9zZW5FeGNsdWRlSXRlbSkpIHt9IGVsc2UgewogICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICBkcGx5cjo6c2VsZWN0KC1jb250YWlucyhjaG9zZW5FeGNsdWRlSXRlbSkpCiAgfQoKICAjIHJldHVybiBjbGVhbmVkIGRhdGFzZXQKICByZXR1cm4oZF9jbGVhbikKfQoKIyBtYWtlIGZ1bmN0aW9uIGZvciBleGFtaW5pbmcgZXhjbHVzaW9uIG9mIHBhcnRpY2lwYW50cwpleGNsdWRlZENvdW50cyA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CiAgCiAgIyBzZXQgZGF0YXNvdXJjZQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXsKICAgIGQgPC0gZDEKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5MQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7CiAgICBkIDwtIGQyCiAgICBkX3JhdyA8LSBkX3Jhd19zdHVkeTIKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgZCA8LSBkMwogICAgZF9yYXcgPC0gZF9yYXdfc3R1ZHkzCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXsKICAgIGQgPC0gZDQKICAgIGRfcmF3IDwtIGRfcmF3X3N0dWR5NAogIH0KICAKICAjIGdldCBzdWJpZHMgb2Ygc3VjY2Vzc2Z1bCBwYXJ0aWNpcGFudHMKICBkX3N1YmlkcyA8LSBsZXZlbHMoZmFjdG9yKGFzLmNoYXJhY3RlcihkJHN1YmlkKSkpCiAgCiAgIyBnZXQgc3ViaWRzIG9mIGV4Y2x1ZGVkIHBhcnRpY2lwYW50cwogIGRfZXhjbHVkZWQgPC0gZF9yYXcgJT4lCiAgICBmaWx0ZXIoaXMuZWxlbWVudChzdWJpZCwgZF9zdWJpZHMpID09IEZBTFNFKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCBzdWJpZCwgZmluaXNoZWQsIHN0YXJ0c193aXRoKCJDQVRDSCIpLCB5b2IpCgogICMgY291bnQgZXhjbHVkZWQgcGFydGljaXBhbnRzCiAgZF9leGNsdWRlZF9uIDwtIGxlbmd0aChkX2V4Y2x1ZGVkJHN1YmlkKQogIAogIGlmKGRhdGFzb3VyY2UgJWluJSBjKCJzdHVkeSAxIiwgInN0dWR5IDIiLCAic3R1ZHkgNCIpKSB7CiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZGlkIG5vdCBmaW5pc2gKICAgIGRfZXhjbHVkZWRfdW5maW5pc2hlZCA8LSBkX2V4Y2x1ZGVkICU+JQogICAgICBmaWx0ZXIoaXMubmEoQ0FUQ0gpID09IFQsCiAgICAgICAgICAgICBmaW5pc2hlZCAhPSAxKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogICAgCiAgICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQsIGJ1dCBmYWlsZWQgY2F0Y2ggdHJpYWwKICAgIGRfZXhjbHVkZWRfQ0FUQ0ggPC0gZF9leGNsdWRlZCAlPiUKICAgICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgICBmaWx0ZXIoQ0FUQ0ggIT0gMSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgICBjKCkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgICMgY291bnQgcGFydGljaXBhbnRzIHdobyBkaWQgbm90IGZpbmlzaAogICAgZF9leGNsdWRlZF91bmZpbmlzaGVkIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5uYShDQVRDSC4uY2hhcmFjdGVyTCkgPT0gVCwKICAgICAgICAgICAgIGlzLm5hKENBVENILi5jaGFyYWN0ZXJSKSA9PSBULAogICAgICAgICAgICAgZmluaXNoZWQgIT0gMSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgICBjKCkKICAgIAogICAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGZpbmlzaGVkLCBidXQgZmFpbGVkIGNhdGNoIHRyaWFsCiAgICBkX2V4Y2x1ZGVkX0NBVENIIDwtIGRfZXhjbHVkZWQgJT4lCiAgICAgIGZpbHRlcihpcy5lbGVtZW50KHN1YmlkLCBkX2V4Y2x1ZGVkX3VuZmluaXNoZWQkc3ViaWQpID09IEZBTFNFKSAlPiUKICAgICAgZmlsdGVyKENBVENILi5jaGFyYWN0ZXJMICE9IDUgfCBDQVRDSC4uY2hhcmFjdGVyUiAhPSA1KSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdWJpZCkgJT4lCiAgICAgIGMoKQogIH0KICAKICAjIGNvdW50IHBhcnRpY2lwYW50cyB3aG8gZmluaXNoZWQgYW5kIHBhc3NlZCBjYXRjaCB0cmlhbCwgCiAgIyBidXQgZGlkIG5vdCBwcm92aWRlIHllYXIgb2YgYmlydGgKICBkX2V4Y2x1ZGVkX25vX3lvYiA8LSBkX2V4Y2x1ZGVkICU+JQogICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9DQVRDSCRzdWJpZCkgPT0gRkFMU0UpICU+JQogICAgbXV0YXRlKHlvYiA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHlvYikpKSAlPiUKICAgIGZpbHRlcihpcy5uYSh5b2IpIHwgeW9iIDwgMTg5OSB8IG5jaGFyKGFzLmNoYXJhY3Rlcih5b2IpKSAhPSA0KSAlPiUKICAgIGRwbHlyOjpzZWxlY3Qoc3ViaWQpICU+JQogICAgYygpCiAgCiAgIyBjb3VudCBwYXJ0aWNpcGFudHMgd2hvIGZpbmlzaGVkIGFuZCBwYXNzZWQgY2F0Y2ggdHJpYWwsIAogICMgYnV0IGRpZCBub3QgcHJvdmlkZSB5ZWFyIG9mIGJpcnRoCiAgZF9leGNsdWRlZF95b3VuZyA8LSBkX2V4Y2x1ZGVkICU+JQogICAgZmlsdGVyKGlzLmVsZW1lbnQoc3ViaWQsIGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9DQVRDSCRzdWJpZCkgPT0gRkFMU0UsCiAgICAgICAgICAgaXMuZWxlbWVudChzdWJpZCwgZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpID09IEZBTFNFKSAlPiUKICAgIG11dGF0ZSh5b2IgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcih5b2IpKSkgJT4lCiAgICBmaWx0ZXIoaXMubmEoeW9iKSB8IDIwMTYgLSB5b2IgPCAxOCkgJT4lCiAgICBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUKICAgIGMoKQogIAogICMgc3VtIHVwIGV4Y2x1ZGVkIHBhcnRpY2lwYW50cyBieSBjYXRlZ29yeQogIHRvdGFsIDwtIHN1bShsZW5ndGgoZF9leGNsdWRlZF91bmZpbmlzaGVkJHN1YmlkKSwKICAgICAgICAgICAgICAgbGVuZ3RoKGRfZXhjbHVkZWRfQ0FUQ0gkc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpLAogICAgICAgICAgICAgICBsZW5ndGgoZF9leGNsdWRlZF95b3VuZyRzdWJpZCkpCiAgCiAgIyBjYWxjdWxhdGUgY291bnRzCiAgZXhjbHVkZWRfY291bnRzIDwtIAogICAgZGF0YS5mcmFtZSgiZGlkX25vdF9maW5pc2giID0gbGVuZ3RoKGRfZXhjbHVkZWRfdW5maW5pc2hlZCRzdWJpZCksCiAgICAgICAgICAgICAgICJmYWlsZWRfY2F0Y2hfdHJpYWwiID0gbGVuZ3RoKGRfZXhjbHVkZWRfQ0FUQ0gkc3ViaWQpLAogICAgICAgICAgICAgICAiZGlkX25vdF9wcm92aWRlX3lvYiIgPSBsZW5ndGgoZF9leGNsdWRlZF9ub195b2Ikc3ViaWQpLAogICAgICAgICAgICAgICAidG9vX3lvdW5nIiA9IGxlbmd0aChkX2V4Y2x1ZGVkX3lvdW5nJHN1YmlkKSwKICAgICAgICAgICAgICAgIlRPVEFMX2V4Y2x1ZGVkIiA9IHRvdGFsLAogICAgICAgICAgICAgICAiVE9UQUxfcGFydGljaXBhdGVkIiA9IGxlbmd0aChkJHN1YmlkKSwKICAgICAgICAgICAgICAgIk9WRVJBTExfVE9UQUwiID0gc3VtKHRvdGFsLCBsZW5ndGgoZCRzdWJpZCkpKQogIAogIGlmKHRvdGFsICE9IGRfZXhjbHVkZWRfbikgewogICAgc3RvcCgiRXJyb3I6IDQgc291cmNlcyBvZiBleGNsdXNpb24gZG8gbm90IGFkZCB1cCB0byB0b3RhbC4iKQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuKGV4Y2x1ZGVkX2NvdW50cykKICAgIH0KfQoKIyBtYWtlIGZ1bmN0aW9uIGZvciBzdHJpcHBpbmcgZGF0YWZyYW1lcyBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24KbWFrZURSREYgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSwgY2hvc2VuQ29uZGl0aW9uKSB7CiAgCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7CiAgICAjIHJlbmFtZSB2YXJpYWJsZXMgZm9yIGVhc2Ugb2YgZnVuY3Rpb24gYXBwbHBpY2F0aW9uCiAgICBkIDwtIGQzICU+JQogICAgICByZW5hbWUob3JkZXIgPSBjb25kaXRpb24sCiAgICAgICAgICAgICBjb25kaXRpb24gPSB0YXJnZXQpCiAgICAKICAgICMgcmVuYW1lIHN1YmlkcyBieSBjb25kaXRpb24gaWYgY29sbGFwc2VzIGFjcm9zcyBjb25kaXRpb25zCiAgICBkIDwtIGQgJT4lCiAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKGNvbmRpdGlvbiwgc3ViaWQsIHNlcCA9ICJfIikpCiAgfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQogIAogICMgZmlsdGVyIGJ5IGNvbmRpdGlvbiBpZiBzcGVjaWZpZWQKICBpZihjaG9zZW5Db25kaXRpb24gJWluJSBjKCJiZWV0bGUiLCAicm9ib3QiKSkgewogICAgZCA8LSBkICU+JSBmaWx0ZXIoY29uZGl0aW9uID09IGNob3NlbkNvbmRpdGlvbikKICB9CiAgCiAgIyBtYWtlIHN0cmlwcGVkIGRhdGFmcmFtZSBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24gYW5hbHlzZXMKICBkX3N0cmlwIDwtIGQgJT4lCiAgICBkcGx5cjo6c2VsZWN0KHN1YmlkLCBoYXBweTpwcmlkZSkKICBkX3N0cmlwIDwtIGRhdGEuZnJhbWUoZF9zdHJpcFssLTFdLCByb3cubmFtZXMgPSBkX3N0cmlwJHN1YmlkKQogIAogICMgcmV0dXJuIHN0cmlwcGVkIGRhdGFmcmFtZQogIHJldHVybihkX3N0cmlwKQp9CgojIG1ha2UgZGVtb2dyYXBoaWNzIGZ1bmN0aW9ucwpkZW1vU2FtcGxlU2l6ZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZW5hbWUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgcmVuYW1lKG9yZGVyID0gY29uZGl0aW9uLAogICAgICAgICAgICAgY29uZGl0aW9uID0gdGFyZ2V0KQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIHNhbXBsZV9zaXplIDwtIHZlY3RvcigpCiAgZm9yKGkgaW4gbGV2ZWxzKGQkY29uZGl0aW9uKSkgewogICAgc2FtcGxlX3NpemVbYXMuY2hhcmFjdGVyKGkpXSA8LSAKICAgICAgYXMubnVtZXJpYyhkICU+JSBmaWx0ZXIoY29uZGl0aW9uID09IGkpICU+JSBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUgCiAgICAgICAgICAgICAgICAgICB1bmlxdWUoKSAlPiUgY291bnQoKSkKICB9CgogICMgYWRkIHRvdGFsIHNhbXBsZSBzaXplICAKICBzYW1wbGVfc2l6ZVsiYWxsIl0gPC0gYXMubnVtZXJpYyhkICU+JSBkcGx5cjo6c2VsZWN0KHN1YmlkKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUoKSAlPiUgY291bnQoKSkKICAKICAjIG1ha2UgaW50byBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgc2FtcGxlX3NpemUgPC0gZGF0YS5mcmFtZShzYW1wbGVfc2l6ZSkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oKSAlPiUKICAgIHJlbmFtZShjb25kaXRpb24gPSByb3duYW1lLAogICAgICAgICAgIG4gPSBzYW1wbGVfc2l6ZSkKICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKHNhbXBsZV9zaXplKQp9CmRlbW9EdXJhdGlvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpewogICAgIyByZWNvZGUgdmFyaWFibGVzIGZvciBlYXNlIG9mIGZ1bmN0aW9uIGFwcGxwaWNhdGlvbgogICAgZCA8LSBkMyAlPiUKICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9ICJ3aXRoaW4tc3ViamVjdHMiKQogIH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNvbmRpdGlvbgogIGR1cmF0aW9uIDwtIGQgJT4lCiAgICBncm91cF9ieShjb25kaXRpb24pICU+JQogICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgbWF4X2R1cmF0aW9uID0gbWF4KGR1cmF0aW9uKSwKICAgICAgICAgICAgICBtZWRpYW5fZHVyYXRpb24gPSBtZWRpYW4oZHVyYXRpb24pLAogICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uKSwKICAgICAgICAgICAgICBzZF9kdXJhdGlvbiA9IHNkKGR1cmF0aW9uKSkKCiAgIyBhZGQgdG90YWwgZHVyYXRpb24KICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgYWxsIDwtIGQgJT4lCiAgICAgIHN1bW1hcmlzZShtaW5fZHVyYXRpb24gPSBtaW4oZHVyYXRpb24pLAogICAgICAgICAgICAgICAgbWF4X2R1cmF0aW9uID0gbWF4KGR1cmF0aW9uKSwKICAgICAgICAgICAgICAgIG1lZGlhbl9kdXJhdGlvbiA9IG1lZGlhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBtZWFuX2R1cmF0aW9uID0gbWVhbihkdXJhdGlvbiksCiAgICAgICAgICAgICAgICBzZF9kdXJhdGlvbiA9IHNkKGR1cmF0aW9uKSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiYWxsIikKICAgIGR1cmF0aW9uIDwtIHJiaW5kKGR1cmF0aW9uLCBhbGwpICMgbm90IHN1cmUgd2h5IGZ1bGxfam9pbiBkb2Vzbid0IHdvcmsgICAgCiAgfQoKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGR1cmF0aW9uKQp9CmRlbW9BZ2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXsKICAgICMgcmVjb2RlIHZhcmlhYmxlcyBmb3IgZWFzZSBvZiBmdW5jdGlvbiBhcHBscGljYXRpb24KICAgIGQgPC0gZDMgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAid2l0aGluLXN1YmplY3RzIikKICB9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CgogICMgZ2V0IHNhbXBsZSBzaXplIHBlciBjb25kaXRpb24KICBhZ2UgPC0gZCAlPiUKICAgIGdyb3VwX2J5KGNvbmRpdGlvbikgJT4lCiAgICBzdW1tYXJpc2UobWluX2FnZSA9IG1pbihhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICBtYXhfYWdlID0gbWF4KGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIG1lZGlhbl9hZ2UgPSBtZWRpYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZV9hcHByb3gpKQoKICAjIGFkZCB0b3RhbCBhZ2UKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgYWxsIDwtIGQgJT4lCiAgICAgIHN1bW1hcmlzZShtaW5fYWdlID0gbWluKGFnZV9hcHByb3gpLAogICAgICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2VfYXBwcm94KSwKICAgICAgICAgICAgICAgIG1lZGlhbl9hZ2UgPSBtZWRpYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlX2FwcHJveCksCiAgICAgICAgICAgICAgICBzZF9hZ2UgPSBzZChhZ2VfYXBwcm94KSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiYWxsIikKICAgIGFnZSA8LSBmdWxsX2pvaW4oYWdlLCBhbGwpCiAgfQoKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgcmV0dXJuKGFnZSkKfQpkZW1vR2VuZGVyIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgZ2VuZGVyIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgZ2VuZGVyIDwtIGRhdGEuZnJhbWUoYWRkbWFyZ2lucyh3aXRoKGQsIHRhYmxlKGNvbmRpdGlvbiwgZ2VuZGVyKSkpKSAlPiUKICAgICAgZmlsdGVyKGdlbmRlciAhPSAiU3VtIikgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpIHsKICAgIGdlbmRlciA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUoZ2VuZGVyKSkpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIlN1bSIpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KGNvbmRpdGlvbiwgZ2VuZGVyLCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgZ2VuZGVyIDwtIGdlbmRlciAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCBnZW5kZXIpICU+JQogICAgc3ByZWFkKGdlbmRlciwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpIHsKICAgIGdlbmRlciA8LSBnZW5kZXIgJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCBnZW5kZXIpICU+JQogICAgc3ByZWFkKGdlbmRlciwgbikKICB9CiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lIGZvciB1c2luZyBrYWJsZQogIHJldHVybihnZW5kZXIpCn0KZGVtb1JhY2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCByYWNlIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDQiKSkgewogICAgcmFjZSA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIHJhY2VfY2F0KSkpKSAlPiUKICAgICAgZmlsdGVyKHJhY2VfY2F0ICE9ICJTdW0iKSAlPiUKICAgICAgcmVuYW1lKG4gPSBGcmVxKQogIH0KICAKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIikgewogICAgcmFjZSA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUocmFjZV9jYXQpKSkgJT4lCiAgICAgIHJlbmFtZShuID0gRnJlcSkgJT4lCiAgICAgIG11dGF0ZShjb25kaXRpb24gPSAiU3VtIikgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3QoY29uZGl0aW9uLCByYWNlX2NhdCwgbikKICB9CiAgCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSAzIikpIHsKICAgIHJhY2UgPC0gcmFjZSAlPiUKICAgIG11dGF0ZShjb25kaXRpb24gPSBmYWN0b3IoaWZlbHNlKGNvbmRpdGlvbiA9PSAiU3VtIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNvbmRpdGlvbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByYWNlX2NhdCkgJT4lCiAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKSB7CiAgICByYWNlIDwtIHJhY2UgJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY29uZGl0aW9uLCByYWNlX2NhdCkgJT4lCiAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICByZXR1cm4ocmFjZSkKfQpkZW1vUmVsaWdpb24gPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQoKICAjIGdldCByZWxpZ2lvbiBwZXIgY29uZGl0aW9uIGFuZCBvdmVyYWxsCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIpKSB7CiAgICByZWxpZ2lvbiA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIHJlbGlnaW9uX2NhdCkpKSkgJT4lCiAgICAgIGZpbHRlcihyZWxpZ2lvbl9jYXQgIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpCiAgfQogIAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKSB7CiAgICByZWxpZ2lvbiA8LSBkYXRhLmZyYW1lKHdpdGgoZCwgdGFibGUocmVsaWdpb25fY2F0KSkpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gIlN1bSIpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0LCBuKQogIH0KICAKICBpZihkYXRhc291cmNlICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIiwgInN0dWR5IDMiKSkgewogICAgcmVsaWdpb24gPC0gcmVsaWdpb24gJT4lCiAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3Rlcihjb25kaXRpb24pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYmVldGxlIiwgInJvYm90IiwgImFsbCIpKSkgJT4lCiAgICBhcnJhbmdlKGNvbmRpdGlvbiwgcmVsaWdpb25fY2F0KSAlPiUKICAgIHNwcmVhZChyZWxpZ2lvbl9jYXQsIG4pCiAgfQogIAogICMgcmV0dXJuIGRhdGFmcmFtZSBmb3IgdXNpbmcga2FibGUKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7CiAgICBzdG9wKCJSZWxpZ2lvbiBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlIGZvciBTdHVkeSA0IikKICB9IGVsc2Uge3JldHVybihyZWxpZ2lvbil9Cn0KZGVtb0VkdWNhdGlvbiA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgCiAgIyBnZXQgZWR1Y2F0aW9uIHBlciBjb25kaXRpb24gYW5kIG92ZXJhbGwKICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0IikgewogICAgZWR1Y2F0aW9uIDwtIAogICAgICBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkLCB0YWJsZShjb25kaXRpb24sIGVkdWNhdGlvbikpKSkgJT4lCiAgICAgIGZpbHRlcihlZHVjYXRpb24gIT0gIlN1bSIpICU+JQogICAgICByZW5hbWUobiA9IEZyZXEpICU+JQogICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGlmZWxzZShjb25kaXRpb24gPT0gIlN1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY29uZGl0aW9uKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhsZXZlbHMoZCRjb25kaXRpb24pLCAiYWxsIikpLAogICAgICAgICAgICAgZWR1Y2F0aW9uID0gZmFjdG9yKGVkdWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKDE6NywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygic29tZV9IUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSFNfZGlwbG9tYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29tZV9jb2xsZWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc3NvY2lhdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNoZWxvcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvbWVfZ3JhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlZl9ubyIpKSkgJT4lCiAgICAgIGFycmFuZ2UoY29uZGl0aW9uLCBlZHVjYXRpb24pICU+JQogICAgICBzcHJlYWQoZWR1Y2F0aW9uLCBuKQogIH0KICAKICAjIHJldHVybiBkYXRhZnJhbWUgZm9yIHVzaW5nIGthYmxlCiAgaWYoZGF0YXNvdXJjZSAlaW4lIGMoInN0dWR5IDEiLCAic3R1ZHkgMiIsICJzdHVkeSAzIikpewogICAgc3RvcCgiRWR1Y2F0aW9uIGluZm9ybWF0aW9uIG5vdCBhdmFpbGFibGUgZm9yIFN0dWRpZXMgMS0zIikKICB9IGVsc2Uge3JldHVybihlZHVjYXRpb24pfQp9CgojIHBsb3R0aW5nIGZ1bmN0aW9ucwptYWtlRmFjZXRMYWJzIDwtIGZ1bmN0aW9uKGRmX3Bsb3R0aW5nKSB7CiAgZmFjZXRfbGFiZWxzIDwtIGFycmF5KCkKICBkZl9wbG90dGluZyA8LSBkZl9wbG90dGluZyAlPiUgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24pKQogIGZvcihpIGluIDE6bGVuZ3RoKGxldmVscyhkZl9wbG90dGluZyRjb25kaXRpb24pKSkgewogICAgZGYgPC0gZGZfcGxvdHRpbmcgJT4lIGZpbHRlcihjb25kaXRpb24gPT0gbGV2ZWxzKGRmX3Bsb3R0aW5nJGNvbmRpdGlvbilbaV0pICU+JQogICAgICBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKICAgIGZhY2V0X2xhYmVsc1tpXSA8LSBwYXN0ZTAoZGYkY29uZGl0aW9uLCAiIChuID0gIiwgZGYkbiwgIikiKQogIH0KICBuYW1lcyhmYWNldF9sYWJlbHMpIDwtIGxldmVscyhkZl9wbG90dGluZyRjb25kaXRpb24pCiAgcmV0dXJuKGZhY2V0X2xhYmVscykKfQpgYGAKCmBgYHtyIG1vZGVsaW5nIGRlY2lzaW9uc30KIyByZW1vdmUgb3V0bGllcnM/CmNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAia2VlcCIKIyBjaG9zZW5PdXRsaWVySGFuZGxpbmcgPC0gInJlbW92ZSIKCiMgZXhjbHVkZSBhbnkgY29uZGl0aW9ucyBpbiBzdHVkeSA0PwpjaG9zZW5FeGNsdWRlIDwtICJub25lIgojIGNob3NlbkV4Y2x1ZGUgPC0gYygic3RhcGxlciIsICJjYXIiLCAiY29tcHV0ZXIiKQoKIyBleGNsdWRlIGFueSBpdGVtcz8KY2hvc2VuRXhjbHVkZUl0ZW0gPC0gIm5vbmUiCiMgY2hvc2VuRXhjbHVkZUl0ZW0gPC0gImNvbXB1dGF0aW9ucyIKCiMgTk9URTogYWx3YXlzIGNob29zZSBtaW5pbWFsIHJlc2lkdWFsIChmbSA9ICJtaW5yZXMiKSBpbnN0ZWFkIG9mIE1MIGJlY2F1c2Ugb2Ygbm9uLW5vcm1hbGl0eQoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIGNvcnJlbGF0aW9uPwpjaG9zZW5Db3JUeXBlIDwtICJjb3IiICMgcGVhcnNvbiBjb3JyZWxhdGlvbgojIGNob3NlbkNvclR5cGUgPC0gInBvbHkiICMgcG9seWNob3JpYyBjb3JyZWxhdGlvbgoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIHJvdGF0aW9uPwpjaG9zZW5Sb3RUeXBlIDwtICJ2YXJpbWF4IiAjIHZhcmltYXggcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJvYmxpbWluIiAjIG9ibGltaW4gcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJub25lIiAjIG5vIHJvdGF0aW9uCgpkYXRhLmZyYW1lKCJjb25kaXRpb25zRXhjbHVkZWQiID0gY2hvc2VuRXhjbHVkZSwKICAgICAgICAgICAib3V0bGllckhhbmRsaW5nIiA9IGNob3Nlbk91dGxpZXJIYW5kbGluZywKICAgICAgICAgICAiRUZBX2NvcnJlbGF0aW9uIiA9IGNob3NlbkNvclR5cGUsCiAgICAgICAgICAgIkVGQV9yb3RhdGlvbiIgPSBjaG9zZW5Sb3RUeXBlKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIERhdGEgcHJlcGFyYXRpb24KCmBgYHtyIGRhdGEgdXBsb2FkfQojIHN0dWR5IDEgKDIwMTUtMTItMTUsIDIgY29uZGl0aW9ucywgYmV0d2Vlbi1zdWJqZWN0cykKZF9yYXdfc3R1ZHkxIDwtIHJlYWQuY3N2KCJodHRwczovL29zZi5pby8yOXZuZy9kb3dubG9hZCIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxIikKCiMgc3R1ZHkgMiAoMjAxNi0wMS0xMiwgMiBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzIC0gUkVQTElDQVRJT04pCmRfcmF3X3N0dWR5MiA8LSByZWFkLmNzdigiaHR0cHM6Ly9vc2YuaW8vZzc2aGovZG93bmxvYWQiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMiIpCgojIHN0dWR5IDMgKDIwMTYtMDEtMTAsIDIgY29uZGl0aW9ucywgd2l0aGluLXN1YmplY3RzKQpkX3Jhd19zdHVkeTMgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2VweWtmL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDMiKQoKIyBzdHVkeSA0ICgyMDE2LTAxLTE0LCAyMSBjb25kaXRpb25zLCBiZXR3ZWVuLXN1YmplY3RzKQpkX3Jhd19zdHVkeTQgPC0gcmVhZC5jc3YoImh0dHBzOi8vb3NmLmlvL2tkemdlL2Rvd25sb2FkIikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDQiKQpgYGAKCmBgYHtyIGRhdGEgY2xlYW51cH0KIyBjbGVhbiB1cCBkYXRhc2V0cwpkMSA8LSBjbGVhbnVwKCJzdHVkeSAxIikKZDIgPC0gY2xlYW51cCgic3R1ZHkgMiIpCmQzIDwtIGNsZWFudXAoInN0dWR5IDMiKQpkNCA8LSBjbGVhbnVwKCJzdHVkeSA0IikKYGBgCgpgYGB7ciBkYXRhZnJhbWVzIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbn0KIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHMxCiMgZDFfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAxIiwgImJlZXRsZSIpCiMgZDFfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDEiLCAicm9ib3QiKQpkMV9hbGwgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAyCiMgZDJfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgImJlZXRsZSIpCiMgZDJfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDIiLCAicm9ib3QiKQpkMl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSAzCiMgZDNfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImJlZXRsZSIpCiMgZDNfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDMiLCAicm9ib3QiKQpkM19hbGwgPC0gbWFrZURSREYoInN0dWR5IDMiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBzdHVkeSA0CmQ0X2FsbCA8LSBtYWtlRFJERigic3R1ZHkgNCIsICJhbGwiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgoKIyBDb25jZXB0dWFsIHVuaXRzCgpgYGB7cn0KY2hvc2VuX2ZtIDwtICJtaW5yZXMiCmNob3Nlbl9jb3IgPC0gY2hvc2VuQ29yVHlwZQpjaG9zZW5fcm90IDwtIGNob3NlblJvdFR5cGUKY2hvc2VuX3Njb3JlcyA8LSAidGVuQmVyZ2UiCmBgYAoKCiMjIFN0dWR5IDEKCmBgYHtyfQplZmFfcG5hc2QxIDwtIGZhX2Z1bihkMV9hbGwsIHJldGVuX2Z1bihkMV9hbGwsICJ2YXJpbWF4IikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDIuNSwgZmlnLmFzcCA9IDEuNSwgaW5jbHVkZSA9IFR9CmhlYXRtYXBfZnVuKGVmYV9wbmFzZDEpICsgbGFicyh0aXRsZSA9ICJQTkFTIFN0dWR5IDEiKQpgYGAKCiMjIFN0dWR5IDIKCmBgYHtyfQplZmFfcG5hc2QyIDwtIGZhX2Z1bihkMl9hbGwsIHJldGVuX2Z1bihkMl9hbGwsICJ2YXJpbWF4IikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDIuNSwgZmlnLmFzcCA9IDEuNSwgaW5jbHVkZSA9IFR9CmhlYXRtYXBfZnVuKGVmYV9wbmFzZDIpICsgbGFicyh0aXRsZSA9ICJQTkFTIFN0dWR5IDIiKQpgYGAKCiMjIFN0dWR5IDMKCmBgYHtyfQplZmFfcG5hc2QzIDwtIGZhX2Z1bihkM19hbGwsIHJldGVuX2Z1bihkM19hbGwsICJ2YXJpbWF4IikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDIuNSwgZmlnLmFzcCA9IDEuNSwgaW5jbHVkZSA9IFR9CmhlYXRtYXBfZnVuKGVmYV9wbmFzZDMpICsgbGFicyh0aXRsZSA9ICJQTkFTIFN0dWR5IDMiKQpgYGAKCiMjIFN0dWR5IDQKCmBgYHtyfQplZmFfcG5hc2Q0IDwtIGZhX2Z1bihkNF9hbGwsIHJldGVuX2Z1bihkNF9hbGwsICJ2YXJpbWF4IikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDIuNSwgZmlnLmFzcCA9IDEuNSwgaW5jbHVkZSA9IFR9CmhlYXRtYXBfZnVuKGVmYV9wbmFzZDQpICsgbGFicyh0aXRsZSA9ICJQTkFTIFN0dWR5IDQiKQpgYGAKCgojIE9yZ2FuaXphdGlvbiBvZiBjb25jZXB0dWFsIHVuaXRzCgpgYGB7cn0KaGllcl9wbG90X2Z1bl9wbmFzIDwtIGZ1bmN0aW9uKGRmLCBmYWN0b3IxLCBmYWN0b3IyLCB3aGljaF9lZmEpewogIAogIGhvd19tYW55X2NhcCA8LSBsb2FkaW5nc19mdW4od2hpY2hfZWZhKSAlPiUKICAgIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICAgIHRvcF9uKDEsIGxvYWRpbmcpICU+JQogICAgdW5ncm91cCgpICU+JQogICAgY291bnQoZmFjdG9yKQogIGhvd19tYW55X2NhcCA8LSBtaW4oaG93X21hbnlfY2FwJG4pCiAgCiAgbG9hZGluZ3MgPC0gbG9hZGluZ3NfZnVuKHdoaWNoX2VmYSkgJT4lCiAgICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgICB0b3BfbigxLCBsb2FkaW5nKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGdyb3VwX2J5KGZhY3RvcikgJT4lCiAgICB0b3Bfbihob3dfbWFueV9jYXAsIGxvYWRpbmcpICU+JQogICAgdW5ncm91cCgpCiAgCiAgYnlwYXJ0IDwtICBkZiAlPiUKICAgIHNlbGVjdChzdWJpZCwgY29uZGl0aW9uLCBoYXBweTpwcmlkZSkgJT4lCiAgICBkaXN0aW5jdCgpICU+JQogICAgZ2F0aGVyKGNhcGFjaXR5LCByZXNwb25zZV9udW0sIGhhcHB5OnByaWRlKSAlPiUKICAgIGZpbHRlcihjYXBhY2l0eSAlaW4lIGxvYWRpbmdzJGNhcGFjaXR5KSAlPiUKICAgIGxlZnRfam9pbihsb2FkaW5ncykgJT4lCiAgICBncm91cF9ieShzdWJpZCwgY29uZGl0aW9uLCBmYWN0b3IpICU+JQogICAgbXV0YXRlKHNjb3JlID0gc3VtKHJlc3BvbnNlX251bSwgbmEucm0gPSBUKSkgJT4lCiAgICB1bmdyb3VwKCkgJT4lCiAgICBkaXN0aW5jdChzdWJpZCwgY29uZGl0aW9uLCBmYWN0b3IsIHNjb3JlKQogIAogIG1lYW5zIDwtIGJ5cGFydCAlPiUKICAgIGdyb3VwX2J5KGNvbmRpdGlvbiwgZmFjdG9yKSAlPiUKICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lCiAgICB1bmdyb3VwKCkKICAKICBtZWFuc194IDwtIG1lYW5zICU+JQogICAgZmlsdGVyKGZhY3RvciA9PSBmYWN0b3IxKSAlPiUKICAgIHNlbGVjdCgtZmFjdG9yKSAlPiUKICAgIHJlbmFtZShjaV9sb3dlcl94ID0gY2lfbG93ZXIsCiAgICAgICAgICAgY2lfdXBwZXJfeCA9IGNpX3VwcGVyLAogICAgICAgICAgIG1lYW5feCA9IG1lYW4pCiAgCiAgbWVhbnNfeSA8LSBtZWFucyAlPiUKICAgIGZpbHRlcihmYWN0b3IgPT0gZmFjdG9yMikgJT4lCiAgICBzZWxlY3QoLWZhY3RvcikgJT4lCiAgICByZW5hbWUoY2lfbG93ZXJfeSA9IGNpX2xvd2VyLAogICAgICAgICAgIGNpX3VwcGVyX3kgPSBjaV91cHBlciwKICAgICAgICAgICBtZWFuX3kgPSBtZWFuKQogIAogIG1lYW5zX3h5IDwtIGZ1bGxfam9pbihtZWFuc194LCBtZWFuc195KQogIAogIHBsb3QgPC0gbWVhbnNfeHkgJT4lCiAgICBnZ3Bsb3QoYWVzKHggPSBtZWFuX3gsIHkgPSBtZWFuX3ksCiAgICAgICAgICAgICAgIGNvbG9yID0gY29uZGl0aW9uLCBmaWxsID0gY29uZGl0aW9uKSkgKwogICAgZ2VvbV9hYmxpbmUobHR5ID0gMikgKwogICAgZ2VvbV9qaXR0ZXIoZGF0YSA9IGJ5cGFydCAlPiUgc3ByZWFkKGZhY3Rvciwgc2NvcmUpLAogICAgICAgICAgICAgICAgYWVzX3N0cmluZyh4ID0gZmFjdG9yMSwgeSA9IGZhY3RvcjIpLAogICAgICAgICAgICAgICAgYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICAgIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gY2lfbG93ZXJfeCwgeG1heCA9IGNpX3VwcGVyX3gpLCAKICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgaGVpZ2h0ID0gMCwgc2l6ZSA9IDAuNikgKwogICAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGNpX2xvd2VyX3ksIHltYXggPSBjaV91cHBlcl95KSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCB3aWR0aCA9IDAsIHNpemUgPSAwLjYpICsKICAgIGdlb21fcG9pbnQoY29sb3IgPSAiYmxhY2siLCBzaGFwZSA9IDIxLCBzaXplID0gMywgc3Ryb2tlID0gMSkgKwogICAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTMgKiBob3dfbWFueV9jYXAgLSAwLjI1LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgKiBob3dfbWFueV9jYXAgKyAwLjI1KSwKICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBzZXEoLTMgKiBob3dfbWFueV9jYXAsIDMgKiBob3dfbWFueV9jYXAsIDYpKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtMyAqIGhvd19tYW55X2NhcCAtIDAuMjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAqIGhvd19tYW55X2NhcCArIDAuMjUpLAogICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtMyAqIGhvd19tYW55X2NhcCwgMyAqIGhvd19tYW55X2NhcCwgNikpICsKICAgIHRoZW1lX2J3KCkgKwogICAgZ3VpZGVzKGNvbG9yID0gZ3VpZGVfbGVnZW5kKG92ZXJyaWRlLmFlcyA9IGxpc3QoYWxwaGEgPSAxLCBzaXplID0gMykpKQogIAogIHJldHVybihwbG90KQp9CmBgYAoKYGBge3J9CmhpZXJfcGxvdF9mdW5fcG5hc19zMyA8LSBmdW5jdGlvbihkZiwgZmFjdG9yMSwgZmFjdG9yMiwgd2hpY2hfZWZhKXsKICAKICBob3dfbWFueV9jYXAgPC0gbG9hZGluZ3NfZnVuKHdoaWNoX2VmYSkgJT4lCiAgICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgICB0b3BfbigxLCBsb2FkaW5nKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGNvdW50KGZhY3RvcikKICBob3dfbWFueV9jYXAgPC0gbWluKGhvd19tYW55X2NhcCRuKQogIAogIGxvYWRpbmdzIDwtIGxvYWRpbmdzX2Z1bih3aGljaF9lZmEpICU+JQogICAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogICAgdG9wX24oMSwgbG9hZGluZykgJT4lCiAgICB1bmdyb3VwKCkgJT4lCiAgICBncm91cF9ieShmYWN0b3IpICU+JQogICAgdG9wX24oaG93X21hbnlfY2FwLCBsb2FkaW5nKSAlPiUKICAgIHVuZ3JvdXAoKQogIAogIGJ5cGFydCA8LSAgZGYgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oInN1YmlkX2NvbmRpdGlvbiIpICU+JQogICAgbXV0YXRlKGNvbmRpdGlvbiA9IGdzdWIoIl8uKiQiLCAiIiwgc3ViaWRfY29uZGl0aW9uKSwKICAgICAgICAgICBzdWJpZCA9IGdzdWIoImJlZXRsZV8iLCAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3N1Yigicm9ib3RfIiwgIiIsIHN1YmlkX2NvbmRpdGlvbikpKSAlPiUKICAgIHNlbGVjdCgtc3ViaWRfY29uZGl0aW9uKSAlPiUKICAgIGRpc3RpbmN0KCkgJT4lCiAgICBnYXRoZXIoY2FwYWNpdHksIHJlc3BvbnNlX251bSwgaGFwcHk6cHJpZGUpICU+JQogICAgZmlsdGVyKGNhcGFjaXR5ICVpbiUgbG9hZGluZ3MkY2FwYWNpdHkpICU+JQogICAgbGVmdF9qb2luKGxvYWRpbmdzKSAlPiUKICAgIGdyb3VwX2J5KHN1YmlkLCBjb25kaXRpb24sIGZhY3RvcikgJT4lCiAgICBtdXRhdGUoc2NvcmUgPSBzdW0ocmVzcG9uc2VfbnVtLCBuYS5ybSA9IFQpKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGRpc3RpbmN0KHN1YmlkLCBjb25kaXRpb24sIGZhY3Rvciwgc2NvcmUpCiAgCiAgbWVhbnMgPC0gYnlwYXJ0ICU+JQogICAgZ3JvdXBfYnkoY29uZGl0aW9uLCBmYWN0b3IpICU+JQogICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUKICAgIHVuZ3JvdXAoKQogIAogIG1lYW5zX3ggPC0gbWVhbnMgJT4lCiAgICBmaWx0ZXIoZmFjdG9yID09IGZhY3RvcjEpICU+JQogICAgc2VsZWN0KC1mYWN0b3IpICU+JQogICAgcmVuYW1lKGNpX2xvd2VyX3ggPSBjaV9sb3dlciwKICAgICAgICAgICBjaV91cHBlcl94ID0gY2lfdXBwZXIsCiAgICAgICAgICAgbWVhbl94ID0gbWVhbikKICAKICBtZWFuc195IDwtIG1lYW5zICU+JQogICAgZmlsdGVyKGZhY3RvciA9PSBmYWN0b3IyKSAlPiUKICAgIHNlbGVjdCgtZmFjdG9yKSAlPiUKICAgIHJlbmFtZShjaV9sb3dlcl95ID0gY2lfbG93ZXIsCiAgICAgICAgICAgY2lfdXBwZXJfeSA9IGNpX3VwcGVyLAogICAgICAgICAgIG1lYW5feSA9IG1lYW4pCiAgCiAgbWVhbnNfeHkgPC0gZnVsbF9qb2luKG1lYW5zX3gsIG1lYW5zX3kpCiAgCiAgcGxvdCA8LSBtZWFuc194eSAlPiUKICAgIGdncGxvdChhZXMoeCA9IG1lYW5feCwgeSA9IG1lYW5feSwKICAgICAgICAgICAgICAgY29sb3IgPSBjb25kaXRpb24sIGZpbGwgPSBjb25kaXRpb24pKSArCiAgICBnZW9tX2FibGluZShsdHkgPSAyKSArCiAgICBnZW9tX2ppdHRlcihkYXRhID0gYnlwYXJ0ICU+JSBzcHJlYWQoZmFjdG9yLCBzY29yZSksCiAgICAgICAgICAgICAgICBhZXNfc3RyaW5nKHggPSBmYWN0b3IxLCB5ID0gZmFjdG9yMiksCiAgICAgICAgICAgICAgICBhbHBoYSA9IDAuMjUsIHdpZHRoID0gMC4yNSwgaGVpZ2h0ID0gMC4yNSkgKwogICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBjaV9sb3dlcl94LCB4bWF4ID0gY2lfdXBwZXJfeCksIAogICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBoZWlnaHQgPSAwLCBzaXplID0gMC42KSArCiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gY2lfbG93ZXJfeSwgeW1heCA9IGNpX3VwcGVyX3kpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHdpZHRoID0gMCwgc2l6ZSA9IDAuNikgKwogICAgZ2VvbV9wb2ludChjb2xvciA9ICJibGFjayIsIHNoYXBlID0gMjEsIHNpemUgPSAzLCBzdHJva2UgPSAxKSArCiAgICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygtMyAqIGhvd19tYW55X2NhcCAtIDAuMjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAqIGhvd19tYW55X2NhcCArIDAuMjUpLAogICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtMyAqIGhvd19tYW55X2NhcCwgMyAqIGhvd19tYW55X2NhcCwgNikpICsKICAgIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKC0zICogaG93X21hbnlfY2FwIC0gMC4yNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICogaG93X21hbnlfY2FwICsgMC4yNSksCiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKC0zICogaG93X21hbnlfY2FwLCAzICogaG93X21hbnlfY2FwLCA2KSkgKwogICAgdGhlbWVfYncoKSArCiAgICBndWlkZXMoY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEsIHNpemUgPSAzKSkpCiAgCiAgcmV0dXJuKHBsb3QpCn0KYGBgCgoKIyMgU3R1ZHkgMQoKYGBge3J9CiMgZmEuc29ydChlZmFfcG5hc2QxKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMC44LCBpbmNsdWRlID0gVH0KaGllcl9wbG90X2Z1bl9wbmFzKGQxLCBmYWN0b3IxID0gIkYxIiwgZmFjdG9yMiA9ICJGMiIsIGVmYV9wbmFzZDEpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDIxLCAyMikpICsKICBsYWJzKHRpdGxlID0gIlBOQVMgU3R1ZHkgMTogRW5kb3JzZW1lbnRzIG9mIEJPRFkgdnMuIEhFQVJUIGNhcGFjaXRpZXMiLAogICAgICAgc3VidGl0bGUgPSAiRGVmaW5pbmcgZmFjdG9ycyBieSBhZHVsdHMnIDMtZmFjdG9yIEVGQSBzb2x1dGlvbiIsCiAgICAgICB4ID0gIkJPRFkgKEZhY3RvciAxKSIsIHkgPSAiSEVBUlQgKEZhY3RvciAyKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpoaWVyX3Bsb3RfZnVuX3BuYXMoZDEsIGZhY3RvcjEgPSAiRjEiLCBmYWN0b3IyID0gIkYzIiwgZWZhX3BuYXNkMSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDIyKSkgKwogIGxhYnModGl0bGUgPSAiUE5BUyBTdHVkeSAxOiBFbmRvcnNlbWVudHMgb2YgQk9EWSB2cy4gTUlORCBjYXBhY2l0aWVzIiwKICAgICAgIHN1YnRpdGxlID0gIkRlZmluaW5nIGZhY3RvcnMgYnkgYWR1bHRzJyAzLWZhY3RvciBFRkEgc29sdXRpb24iLAogICAgICAgeCA9ICJCT0RZIChGYWN0b3IgMSkiLCB5ID0gIk1JTkQgKEZhY3RvciAzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpoaWVyX3Bsb3RfZnVuX3BuYXMoZDEsIGZhY3RvcjEgPSAiRjIiLCBmYWN0b3IyID0gIkYzIiwgZWZhX3BuYXNkMSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDIyKSkgKwogIGxhYnModGl0bGUgPSAiUE5BUyBTdHVkeSAxOiBFbmRvcnNlbWVudHMgb2YgSEVBUlQgdnMuIE1JTkQgY2FwYWNpdGllcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJEZWZpbmluZyBmYWN0b3JzIGJ5IGFkdWx0cycgMy1mYWN0b3IgRUZBIHNvbHV0aW9uIiwKICAgICAgIHggPSAiSEVBUlQgKEZhY3RvciAyKSIsIHkgPSAiTUlORCAoRmFjdG9yIDMpIikKYGBgCgojIyBTdHVkeSAyCgpgYGB7cn0KIyBmYS5zb3J0KGVmYV9wbmFzZDIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpoaWVyX3Bsb3RfZnVuX3BuYXMoZDIsIGZhY3RvcjEgPSAiRjEiLCBmYWN0b3IyID0gIkYyIiwgZWZhX3BuYXNkMikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDIyKSkgKwogIGxhYnModGl0bGUgPSAiUE5BUyBTdHVkeSAyOiBFbmRvcnNlbWVudHMgb2YgQk9EWSB2cy4gSEVBUlQgY2FwYWNpdGllcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJEZWZpbmluZyBmYWN0b3JzIGJ5IGFkdWx0cycgMy1mYWN0b3IgRUZBIHNvbHV0aW9uIiwKICAgICAgIHggPSAiQk9EWSAoRmFjdG9yIDEpIiwgeSA9ICJIRUFSVCAoRmFjdG9yIDIpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CmhpZXJfcGxvdF9mdW5fcG5hcyhkMiwgZmFjdG9yMSA9ICJGMSIsIGZhY3RvcjIgPSAiRjMiLCBlZmFfcG5hc2QyKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygyMSwgMjIpKSArCiAgbGFicyh0aXRsZSA9ICJQTkFTIFN0dWR5IDI6IEVuZG9yc2VtZW50cyBvZiBCT0RZIHZzLiBNSU5EIGNhcGFjaXRpZXMiLAogICAgICAgc3VidGl0bGUgPSAiRGVmaW5pbmcgZmFjdG9ycyBieSBhZHVsdHMnIDMtZmFjdG9yIEVGQSBzb2x1dGlvbiIsCiAgICAgICB4ID0gIkJPRFkgKEZhY3RvciAxKSIsIHkgPSAiTUlORCAoRmFjdG9yIDMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CmhpZXJfcGxvdF9mdW5fcG5hcyhkMiwgZmFjdG9yMSA9ICJGMiIsIGZhY3RvcjIgPSAiRjMiLCBlZmFfcG5hc2QyKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygyMSwgMjIpKSArCiAgbGFicyh0aXRsZSA9ICJQTkFTIFN0dWR5IDI6IEVuZG9yc2VtZW50cyBvZiBIRUFSVCB2cy4gTUlORCBjYXBhY2l0aWVzIiwKICAgICAgIHN1YnRpdGxlID0gIkRlZmluaW5nIGZhY3RvcnMgYnkgYWR1bHRzJyAzLWZhY3RvciBFRkEgc29sdXRpb24iLAogICAgICAgeCA9ICJIRUFSVCAoRmFjdG9yIDIpIiwgeSA9ICJNSU5EIChGYWN0b3IgMykiKQpgYGAKCiMjIFN0dWR5IDMKCmBgYHtyfQojIGZhLnNvcnQoZWZhX3BuYXNkMykKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CmhpZXJfcGxvdF9mdW5fcG5hc19zMyhkM19hbGwsIGZhY3RvcjEgPSAiRjEiLCBmYWN0b3IyID0gIkYyIiwgZWZhX3BuYXNkMykgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDIyKSkgKwogIGxhYnModGl0bGUgPSAiUE5BUyBTdHVkeSAzOiBFbmRvcnNlbWVudHMgb2YgQk9EWSB2cy4gSEVBUlQgY2FwYWNpdGllcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJEZWZpbmluZyBmYWN0b3JzIGJ5IGFkdWx0cycgMy1mYWN0b3IgRUZBIHNvbHV0aW9uIiwKICAgICAgIHggPSAiQk9EWSAoRmFjdG9yIDEpIiwgeSA9ICJIRUFSVCAoRmFjdG9yIDIpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CmhpZXJfcGxvdF9mdW5fcG5hc19zMyhkM19hbGwsIGZhY3RvcjEgPSAiRjEiLCBmYWN0b3IyID0gIkYzIiwgZWZhX3BuYXNkMykgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmYjlhOTkiLCAiIzFmNzhiNCIpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDIyKSkgKwogIGxhYnModGl0bGUgPSAiUE5BUyBTdHVkeSAzOiBFbmRvcnNlbWVudHMgb2YgQk9EWSB2cy4gTUlORCBjYXBhY2l0aWVzIiwKICAgICAgIHN1YnRpdGxlID0gIkRlZmluaW5nIGZhY3RvcnMgYnkgYWR1bHRzJyAzLWZhY3RvciBFRkEgc29sdXRpb24iLAogICAgICAgeCA9ICJCT0RZIChGYWN0b3IgMSkiLCB5ID0gIk1JTkQgKEZhY3RvciAzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpoaWVyX3Bsb3RfZnVuX3BuYXNfczMoZDNfYWxsLCBmYWN0b3IxID0gIkYyIiwgZmFjdG9yMiA9ICJGMyIsIGVmYV9wbmFzZDMpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiI2ZiOWE5OSIsICIjMWY3OGI0IikpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjZmI5YTk5IiwgIiMxZjc4YjQiKSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDIxLCAyMikpICsKICBsYWJzKHRpdGxlID0gIlBOQVMgU3R1ZHkgMzogRW5kb3JzZW1lbnRzIG9mIEhFQVJUIHZzLiBNSU5EIGNhcGFjaXRpZXMiLAogICAgICAgc3VidGl0bGUgPSAiRGVmaW5pbmcgZmFjdG9ycyBieSBhZHVsdHMnIDMtZmFjdG9yIEVGQSBzb2x1dGlvbiIsCiAgICAgICB4ID0gIkhFQVJUIChGYWN0b3IgMikiLCB5ID0gIk1JTkQgKEZhY3RvciAzKSIpCmBgYAoKIyMgU3R1ZHkgNAoKYGBge3J9CiMgZmEuc29ydChlZmFfcG5hc2Q0KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMSwgaW5jbHVkZSA9IFR9CmhpZXJfcGxvdF9mdW5fcG5hcyhkNCAlPiUKICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGNvbmRpdGlvbiA9IGZhY3Rvcihjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygic3RhcGxlciIsICJjYXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wdXRlciIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmUiLCAiYmVldGxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlzaCIsICJmcm9nIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmx1ZWpheSIsICJtb3VzZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvYXQiLCAiYmVhciIsICJkb2ciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2xwaGluIiwgImVsZXBoYW50IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbXAiLCAiZmV0dXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwdnMiLCAiaW5mYW50IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQiLCAiYWR1bHQiKSkpLCAKICAgICAgICAgICAgICAgICAgIGZhY3RvcjEgPSAiRjEiLCBmYWN0b3IyID0gIkYyIiwgZWZhX3BuYXNkNCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChhZXMobGFiZWwgPSBjb25kaXRpb24pLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBib3gucGFkZGluZyA9IDAuNzUpICsKICBzY2FsZV9jb2xvcl9odWUoaCA9IGMoMCwgMjUwKSArIDE1KSArCiAgc2NhbGVfZmlsbF9odWUoaCA9IGMoMCwgMjUwKSArIDE1KSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IHJlcCgxOSwgOSkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICBsYWJzKHRpdGxlID0gIlBOQVMgU3R1ZHkgNDogRW5kb3JzZW1lbnRzIG9mIEJPRFkgdnMuIEhFQVJUIGNhcGFjaXRpZXMiLAogICAgICAgc3VidGl0bGUgPSAiRGVmaW5pbmcgZmFjdG9ycyBieSBhZHVsdHMnIDMtZmFjdG9yIEVGQSBzb2x1dGlvbiIsCiAgICAgICB4ID0gIkJPRFkgKEZhY3RvciAxKSIsIHkgPSAiSEVBUlQgKEZhY3RvciAyKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gVH0KaGllcl9wbG90X2Z1bl9wbmFzKGQ0ICU+JQogICAgICAgICAgICAgICAgICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGNvbmRpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzdGFwbGVyIiwgImNhciIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVyIiwgInJvYm90IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9iZSIsICJiZWV0bGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXNoIiwgImZyb2ciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJibHVlamF5IiwgIm1vdXNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ29hdCIsICJiZWFyIiwgImRvZyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbHBoaW4iLCAiZWxlcGhhbnQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGltcCIsICJmZXR1cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB2cyIsICJpbmZhbnQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZCIsICJhZHVsdCIpKSksIAogICAgICAgICAgICAgICAgICAgZmFjdG9yMSA9ICJGMSIsIGZhY3RvcjIgPSAiRjMiLCBlZmFfcG5hc2Q0KSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbCA9IGNvbmRpdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGJveC5wYWRkaW5nID0gMC43NSkgKwogIHNjYWxlX2NvbG9yX2h1ZShoID0gYygwLCAyNTApICsgMTUpICsKICBzY2FsZV9maWxsX2h1ZShoID0gYygwLCAyNTApICsgMTUpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gcmVwKDE5LCA5KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIGxhYnModGl0bGUgPSAiUE5BUyBTdHVkeSA0OiBFbmRvcnNlbWVudHMgb2YgQk9EWSB2cy4gTUlORCBjYXBhY2l0aWVzIiwKICAgICAgIHN1YnRpdGxlID0gIkRlZmluaW5nIGZhY3RvcnMgYnkgYWR1bHRzJyAzLWZhY3RvciBFRkEgc29sdXRpb24iLAogICAgICAgeCA9ICJCT0RZIChGYWN0b3IgMSkiLCB5ID0gIk1JTkQgKEZhY3RvciAzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLCBpbmNsdWRlID0gVH0KaGllcl9wbG90X2Z1bl9wbmFzKGQ0ICU+JQogICAgICAgICAgICAgICAgICAgICBtdXRhdGUoY29uZGl0aW9uID0gZmFjdG9yKGNvbmRpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzdGFwbGVyIiwgImNhciIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVyIiwgInJvYm90IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9iZSIsICJiZWV0bGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXNoIiwgImZyb2ciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJibHVlamF5IiwgIm1vdXNlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ29hdCIsICJiZWFyIiwgImRvZyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbHBoaW4iLCAiZWxlcGhhbnQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGltcCIsICJmZXR1cyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB2cyIsICJpbmZhbnQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZCIsICJhZHVsdCIpKSksIAogICAgICAgICAgICAgICAgICAgZmFjdG9yMSA9ICJGMiIsIGZhY3RvcjIgPSAiRjMiLCBlZmFfcG5hc2Q0KSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbCA9IGNvbmRpdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGJveC5wYWRkaW5nID0gMC43NSkgKwogIHNjYWxlX2NvbG9yX2h1ZShoID0gYygwLCAyNTApICsgMTUpICsKICBzY2FsZV9maWxsX2h1ZShoID0gYygwLCAyNTApICsgMTUpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gcmVwKDE5LCA5KSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKwogIGxhYnModGl0bGUgPSAiUE5BUyBTdHVkeSA0OiBFbmRvcnNlbWVudHMgb2YgSEVBUlQgdnMuIE1JTkQgY2FwYWNpdGllcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJEZWZpbmluZyBmYWN0b3JzIGJ5IGFkdWx0cycgMy1mYWN0b3IgRUZBIHNvbHV0aW9uIiwKICAgICAgIHggPSAiSEVBUlQgKEZhY3RvciAyKSIsIHkgPSAiTUlORCAoRmFjdG9yIDMpIikKYGBgCgoK